package br.unirio.octopus.dominio;

import java.util.Comparator;

public class ClassificacaoPaisDTO {
	
	private Integer pontos;
	private Integer golsPro;
	private Integer golsContra;
	private Integer saldo;
	private Integer idPais;
	private Integer numeroGrupo;
	

	public ClassificacaoPaisDTO(Integer idDoPais){
			pontos=0;
			golsPro=0;
			golsContra=0;
			saldo=0;
			idPais=idDoPais;
	}

	public void adicionar(Jogo jogo){
		if(idPais.equals(jogo.getPais1().getIdDoPais()))
		{
			pontos+=calcularPontosDePais(jogo.getGolsPais1(), jogo.getGolsPais2());
			golsPro+=jogo.getGolsPais1();
			golsContra+=jogo.getGolsPais2();
			saldo = golsPro - golsContra;
		}
		else
		{
			pontos+=calcularPontosDePais(jogo.getGolsPais2(), jogo.getGolsPais1());
			golsPro+=jogo.getGolsPais2();
			golsContra+=jogo.getGolsPais1();
			saldo = golsPro - golsContra;
		}
		numeroGrupo = jogo.getNumeroGrupo();
	}
	
	public Integer getPontos() {
		return pontos;
	}


	public void setPontos(Integer pontos) {
		this.pontos = pontos;
	}


	public Integer getGolsPro() {
		return golsPro;
	}


	public void setGolsPro(Integer golsPro) {
		this.golsPro = golsPro;
	}


	public Integer getGolsContra() {
		return golsContra;
	}


	public void setGolsContra(Integer golsContra) {
		this.golsContra = golsContra;
	}


	public Integer getSaldo() {
		return saldo;
	}


	public void setSaldo(Integer saldo) {
		this.saldo = saldo;
	}


	public Integer getIdPais() {
		return idPais;
	}


	public void setIdPais(Integer idPais) {
		this.idPais = idPais;
	}


	public Integer getNumeroGrupo() {
		return numeroGrupo;
	}


	public void setNumeroGrupo(Integer numeroGrupo) {
		this.numeroGrupo = numeroGrupo;
	}
	
	public Integer calcularPontosDePais(Integer golsDoPais, Integer golsDoPaisAdversario){
		
		if(golsDoPais==golsDoPaisAdversario){
			return 1;
		}
		if(golsDoPais>golsDoPaisAdversario){
			return 3;
		}
		return 0;

	}
	
	 public static Comparator<ClassificacaoPaisDTO> getComparator() {
	        return new ClassificacaoComparator();
	  }
	
	 private static class ClassificacaoComparator implements Comparator<ClassificacaoPaisDTO> {


	        private ClassificacaoComparator() {

	        }
	        
	        //retorna 0 se sao iguais, valor positivo se o1 > o2, valor negativo se o1 < o2
	        public int compare(ClassificacaoPaisDTO o1, ClassificacaoPaisDTO o2) {
	        	
	        	//primeira comparacao: pontos dos paises
	        	int comparacao = o2.getPontos() - o1.getPontos();
	        	if(comparacao!=0){ 
	        		//se nao houve empate, retorna
	        		return comparacao;
	        	}
	        	//segunda comparacao: saldo dos paises
	        	comparacao = o2.getSaldo() - o1.getSaldo();
	        	if(comparacao!=0){
	        		//se nao houve empate, retorna
	        		return comparacao;
	        	}
	        	//terceira comparacao: golsPro dos paises
	        	comparacao = o2.getGolsPro() - o1.getGolsPro();
	        	
	        	//se houver empate nao faz nada
	        	return comparacao;
	        	
	        }
	 };
	
	
	
}
